package com.yichi;

import android.app.Application;
import android.content.Context;

import com.cretin.www.cretinautoupdatelibrary.interfaces.AppUpdateInfoListener;
import com.cretin.www.cretinautoupdatelibrary.model.TypeConfig;
import com.cretin.www.cretinautoupdatelibrary.model.UpdateConfig;
import com.cretin.www.cretinautoupdatelibrary.utils.AppUpdateUtils;
import com.serotonin.modbus4j.ModbusConfig;
import com.yichi.global.AppConfig;
import com.yichi.model.UpdateModel;
import com.yichi.service.DeviceService;
import com.yichi.service.EventServer;
import com.yichi.service.IccardComService;
import com.yichi.service.IccardService;
import com.yichi.service.MqttService;
import com.yichi.service.PcbService;
import com.yichi.service.PlatformService;
import com.yichi.service.PlcService;
import com.yichi.util.ToastUtil;

import java.util.Map;
import java.util.concurrent.Executors;

public class YiChiApplication extends Application {

    private static final String TAG = "YiChiApplication";

    public static Context application;

    @Override
    public void onCreate() {
        super.onCreate();
        application = this;

        // DeviceService.inst.clearData();
        AppConfig.loadPlaformBaseURL();
        configUpdate();
        configModbus();
        this.init();
//        this.test();
    }

    private void test() {
//        boolean b = new PlcService().isBatteryMoveComplete();
//        System.out.println("b===="+ b);

        //测试pcb数据
//        PcbService.inst.queryDataInfo(DeviceService.inst.rechargeStoreStartIndex, DeviceService.inst.rechargeStoreCount);

        //测试http：获取BMS
//        Executors.newSingleThreadExecutor().execute(() -> {
//            Map<String, Object> bmsInfo = PlatformService.getBmsInfo("BT1048023301000250311001");
//            System.out.println(bmsInfo);
//        });
    }

    //初始串口
    private void init() {
        DeviceService.inst.init();
//        EventServer.inst.init();
//        PlcService.inst.init();
//        PcbService.inst.init();
//        IccardService.inst.init();
//        MqttService.inst.init();
    }

    /**
     * 配置Modbus,可选
     */
    private void configModbus() {
        // 启用rtu的crc校验（默认就启用）
        ModbusConfig.setEnableRtuCrc(true);
        // 打印数据log（默认全禁用）
        // System.out: MessagingControl.send: 01030000000305cb
        // System.out: MessagingConnection.read: 010306000100020000bd75
        ModbusConfig.setEnableDataLog(true, true);
    }

    private void configUpdate(){
        //更新库配置
        UpdateConfig updateConfig = new UpdateConfig()
                .setDebug(true)//是否是Debug模式
                .setBaseUrl("http://106.14.11.11:3000/autoupdate.json")//当dataSourceType为DATA_SOURCE_TYPE_URL时，配置此接口用于获取更新信息
                .setMethodType(TypeConfig.METHOD_GET)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的方法
                .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_URL)//设置获取更新信息的方式
                .setShowNotification(false)//配置更新的过程中是否在通知栏显示进度
                .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标
                .setUiThemeType(TypeConfig.UI_THEME_I)//配置UI的样式，一种有12种样式可供选择
                .setRequestHeaders(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的请求头
                .setRequestParams(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的请求参数
                .setAutoDownloadBackground(false)//是否需要后台静默下载，如果设置为true，则调用checkUpdate方法之后会直接下载安装，不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM，静默安装失效，您需要在自定义的Activity中自主实现静默下载，使用这种方式的时候建议setShowNotification(false)，这样基本上用户就会对下载无感知了
                .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验，如果开启需要提供文件本身正确的MD5校验码，DEMO中提供了获取文件MD5检验码的工具页面，也提供了加密工具类Md5Utils
//                .setCustomActivityClassDownloadConnectionCreator(new OkHttp3Connection.Creator(builder))//如果你想使用okhttp作为下载的载体，可以使用如下代码创建一个OkHttpClient，并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入，在这里可以配置信任所有的证书，可解决根证书不被信任导致无法下载apk的问题
                .setModelClass(new UpdateModel());
        //初始化
        AppUpdateUtils.init(this, updateConfig);
        //提示版本
        AppUpdateUtils.getInstance().addAppUpdateInfoListener(new AppUpdateInfoListener() {
            @Override
            public void isLatestVersion(boolean isLatest) {
                if (isLatest) {
                    ToastUtil.show(application, "已是最新版本");
                } else {
                    //发现新版本，将会提示更新
                }
            }
        });
    }

}
